<?php
/**
 * Maneja las compras a nivel de BD
 * @author José Rodríguez
 */
class Compras_model extends APP_Model
{
    var $id = null;
    var $proveedor_id = null;
    var $factura = null;
    var $total = 0;
    var $cancelado = 0;

    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getProveedor_id() {
        return $this->proveedor_id;
    }

    public function setProveedor_id($proveedor_id) {
        $this->proveedor_id = $proveedor_id;
    }

    public function getFactura() {
        return $this->factura;
    }

    public function setFactura($factura) {
        $this->factura = $factura;
    }

    public function getTotal() {
        return $this->total;
    }

    public function setTotal($total) {
        $this->total = $total;
    }

    public function getCancelado() {
        return $this->cancelado;
    }

    public function setCancelado($cancelado) {
        $this->cancelado = $cancelado;
    }


    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Obtiene las compras realizadas de forma paginada ordenadas por fecha desc
     * @param $limit Cantidad de resultados a ser mostrados
     * @param $start Inicio de los resultados a mostrar
     * @return arreglo de resultados
     */
    function getPaginateResult($limit,$start)
    {
        $this->db->select('compras.*');
        $this->db->select('proveedores.nombre as proveedor_nombre');
        $this->db->from('compras');
        $this->db->join('proveedores', 'compras.proveedor_id = proveedores.id');
        $this->db->order_by("compras.fecha", "desc");
        $this->db->order_by("compras.id", "desc");
        $this->db->limit($start,$limit);
        $query = $this->db->get();
        return $query->result_array();
    }

    /**
     * Registra la compra realizada
     * @param $productos Arreglo de Objetos con los productos adquiridos.
     */
    function add($productos)
    {
        $band = true;
        $this->db->trans_start(TRUE);
        $this->db->insert('compras', $this);
        $auxProductos = array();
        foreach ($productos as $producto){
            $auxProducto['compra_id'] = $this->db->insert_id();
            foreach ($producto as $key => $value) {$auxProducto[$key] = $value;}
            array_push($auxProductos, $auxProducto);
        }
        $this->db->insert_batch('compras_productos', $auxProductos);
        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE)
        {
            //Mensaje de Eroor de Fallo en la Transacción
            $band = false;
        }
        return $band;
    }

    /**
     * Obtiene una compra conocido el id de la compra
     * @return Array
     */
    function getById()
    {
        $this->db->select('factura, fecha, total, cancelado, proveedor_id');
        $this->db->from('compras');
        $this->db->where('id',$this->getId());
        $query = $this->db->get();
        return $query->row_array();
    }

    /**
     * Obtiene los productos contenidos en una compra conocido el id de la compra
     * @return arreglo con los datps de los productos
     */
    function getProductos(){
        $this->db->select('cp.cantidad');
        $this->db->select('cp.costo');
        $this->db->select('p.descripcion as producto_nombre');
        $this->db->select('p.id as producto_id');
        $this->db->select('(cp.cantidad * cp.costo) as importe');
        $this->db->from('compras_productos cp');
        $this->db->join('productos p', 'cp.producto_id = p.id');
        $this->db->where('cp.compra_id',$this->getId());
        $query = $this->db->get();
        return $query->result_array();
    }
}
?>